Cloud computing embraces a utility model that allows users to quickly provision computational resources with predictable costs. Elasticity is an important figure of merit for the cloud, measuring how quickly and to what degree, computational resources can be allocated. Elasticity in Infrastructure as a Service (IaaS) clouds translates into an ability to quickly provision (and de-provision) virtual machines (VMs).
Leveraging horizontal elasticity (i.e., scale-out) on an IaaS cloud is straightforward for applications designed to distribute and/or replicate computational capacity in a variable number of loosely coupled nodes. Quick addition and/or removal of new fixed-capacity VMs will often suffice to satisfy changes in demand. Such applications normally rely on scalable software infrastructures (e.g., MapReduce, BigTable, and Dynamo). These applications are sometimes referred to in the general sense as web applications.
However, there are additional application categories that cannot easily benefit from horizontal elasticity. For example, many enterprise applications normally increase service capacity by increasing computational resources on a small number of nodes (i.e., scale-up). Faced with the need to select a specific VM size at the time of deployment, consumers are often left with a dilemma. Specifically, while size selection is static, the resource demand imposed on the VM is almost certain to change over time, due to the varying load intensity from users. With fixed-size VMs, increases in demand may lead to resource exhaustion (and possibly service interruption), while decreases in demand lead to resource waste.